#pragma once

#include <cppunit/extensions/HelperMacros.h>

#include "QueryPreprocessor.h"
#include "PKB.h"
#include "QueryExpressionParser.h"


class QueryPreprocessorTest : public CPPUNIT_NS::TestFixture 
{ 

	CPPUNIT_TEST_SUITE( QueryPreprocessorTest ); 
	
	CPPUNIT_TEST( testPreprocess );
	CPPUNIT_TEST( testInvalidQuery );
	CPPUNIT_TEST( testMultiplePatterns );
	CPPUNIT_TEST( testMultipleRelations );
	CPPUNIT_TEST( testMultipleRelPattern );
	CPPUNIT_TEST( testMeaninglessSpace );
	CPPUNIT_TEST (testInclProcSynonym);
	CPPUNIT_TEST (testWithClause);
	CPPUNIT_TEST (testInclCallSynonym);
	CPPUNIT_TEST (testIfPattern);
	CPPUNIT_TEST (testBoolean);
	CPPUNIT_TEST (testNextAffect);
	CPPUNIT_TEST (testTuples);
	CPPUNIT_TEST (testContains);
	CPPUNIT_TEST (testQueryReduction);
	//CPPUNIT_TEST (adhoc);
	CPPUNIT_TEST_SUITE_END();

public:
	void setUp();
	void tearDown();


	void testPreprocess();
	void testInvalidQuery();
	void testMultiplePatterns();
	void testMultipleRelations();
	void testMultipleRelPattern();
	void testMeaninglessSpace();
	void testInclProcSynonym();
	void testInclCallSynonym();
	void testIfPattern();
	void testWithClause();
	void testNextAffect();
	void testBoolean();
	void testTuples();
	void testContains();
	//void adhoc();
	void testQueryReduction();
};

    